/**
 * created by LuyonZhang
 *     程序主文件
 * */

'use strict' ;

// ===========
// 程序依赖导入
// ===========
import React from 'react' ;
import ReactDOM from 'react-dom' ;
import PayegisContainer from './containers/PayegisContainer' ;

// ============
// 导入应用状态机
// ============
import { __STORE__ } from './store/RootReducers';

// ============================================================================================================
// 以下是程序渲染代码，新来的前端工程师一定对我这样注释很开心吧.少踩坑不踩坑，你要是不懂就打电话啊，13120132718，请叫张老师!
// ============================================================================================================

const MOUNT_NODE = document.getElementById('Payegis') ;

__STORE__.subscribe(()=>{console.log(__STORE__.getState(),"main store")}) ;

console.log(__STORE__.getState(),"initial store") ;

let render = () => {
    ReactDOM.render(
        <PayegisContainer/>,
        MOUNT_NODE ,
        () => {
            console.log(`欢迎来到咪吱视频`) ;
        }
    )
} ;

// ========================================================
// 开发者工具创建调试
// ========================================================
if (__DEV__) {
    if (window.devToolsExtension) {
        window.devToolsExtension.open()
    }
}
// 此段代码不进行生产程序打包,用于常规报错提醒工具 ；
if (__DEV__) {
    if (module.hot) {
        // Development render functions
        const renderApp = render;
        const renderError = (error) => {
            const RedBox = require('redbox-react').default ;

            ReactDOM.render(<RedBox error={error} />, MOUNT_NODE) ;
        };

        // 程序渲染函数、有尝试捕捉报错
        render = () => {
            try {
                renderApp()
            } catch (error) {
                console.error(error) ;
                renderError(error) ;
            }
        } ;

        // 开发环境模块热替换模式
        module.hot.accept('./routes/RootRoute', () =>
            setImmediate(() => {
                ReactDOM.unmountComponentAtNode(MOUNT_NODE) ;
                render() ;
            })
        )
    }
}

// ========================================================
// 正常执行render方法，开始渲染应用 ；
// ========================================================
render() ;
